/**
 * Copyright(c) 2014 Xunton Solutions
 *
 * History:
 *   15-1-9 上午10:25 Created by dwzhang
 */
package com.jade.framework.base.vfile;

import java.io.File;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;

/**
 * 虚拟文件管理器。
 *
 * @author <a href="mailto:dwzhang@xunton.com">dwzhang</a> 
 * @version 1.0 15-1-9 上午10:25
 */
public interface VFileManager
{
    /**
     * 上传本地文件。
     *
     * @param dataType 数据类型
     * @param localFile 本地文件
     * @return 文件信息对象
     * @throws IOException　处理异常
     */
    public VFileInfo uploadFile(String dataType, File localFile)
            throws IOException;

    /**
     * 根据输入流上传文件。
     *
     * @param info 文件信息
     * @param is 输入流
     * @return 文件信息对象
     * @throws IOException　处理异常
     */
    public VFileInfo uploadFile(VFileInfo info, InputStream is)
            throws IOException;

    /**
     * 直接上传数据到文件中。
     *
     * @param info　文件信息
     * @param data　文件数据
     * @param offset　偏移量
     * @param length　数据大小
     * @return 文件信息大小
     * @throws IOException
     */
    public VFileInfo uploadFile(VFileInfo info, byte[] data, int offset, int length)
            throws IOException;

    /**
     * 根据文件ID获取文件信息．
     *
     * @param dataType 数据类型
     * @param id　文件ID
     * @return 文件信息对象
     * @throws IOException
     */
    public VFileInfo getFileInfo(String dataType, String id)
            throws IOException;

    /**
     * 下载文件到本地文件。
     *
     * @param dataType 数据类型
     * @param id　文件ID
     * @param localFile 本地文件
     * @throws IOException
     */
    public  void downloadFile(String dataType, String id, File localFile)
            throws IOException;

    /**
     * 下载文件到输出流中.
     *
     * @param dataType 数据类型
     * @param id　文件ID
     * @param os 输出流
     * @throws IOException IO异常
     */
    public void downloadFile(String dataType, String id, OutputStream os)
            throws IOException;

    /**
     * 下载文件到输出流中.
     *
     * @param dataType 数据类型
     * @param id　文件ID
     * @param os 输出流
     * @throws IOException IO异常
     */
    public void downloadFile(String dataType, String id, OutputStream os, long offset, long length)
            throws IOException;

    /**
     * 下载文件到输出流中.
     *
     * @param info 文件信息
     * @param os 输出流
     * @throws IOException IO异常
     */
    public void downloadFile(VFileInfo info, OutputStream os)
            throws IOException;

    /**
     * 下载文件到输出流中.
     *
     * @param info 文件信息
     * @param os 输出流
     * @throws IOException IO异常
     */
    public void downloadFile(VFileInfo info, OutputStream os, long offset, long length)
            throws IOException;

    /**
     * 下载文件到本地文件。
     *
     * @param info 文件信息
     * @param localFile 本地文件
     * @throws IOException
     */
    public void downloadFile(VFileInfo info, File localFile)
            throws IOException;

    /**
     * 删除文件。
     *
     * @param dataType 数据类型
     * @param id 文件标识
     * @return 文件信息
     * @throws IOException
     */
    public VFileInfo removeFile(String dataType, String id)
            throws IOException;

    /**
     * 无异常删除文件。
     *
     * @param dataType 数据类型
     * @param id 文件标识
     * @return 文件信息
     */
    public VFileInfo removeFileQuitely(String dataType, String id);
}
